package br.fafica.pi1.rightcode.arquivo;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;

import br.fafica.pi1.rightcode.Exception.CaminhoNaoEncontraException;
import br.fafica.pi1.rightcode.Exception.CompiladoException;
import br.fafica.pi1.rightcode.Exception.JavaException;
import br.fafica.pi1.rightcode.Exception.NaoCompiladoException;
import br.fafica.pi1.rightcode.Exception.NenhumArquivoCompiladoException;

public class Compilador {
	
	private ArrayList <String> filtros = null;
	private CompilerFerramentas compiler;
	private File file;
	
	public Compilador(ArrayList <String> filtros){
		if(filtros == null){
			compiler = new CompilerFerramentas();
		}else{
			this.filtros = filtros;
			compiler = new CompilerFerramentas(filtros);
		}
	}
	
	public void Compilar(String caminho) throws CaminhoNaoEncontraException, JavaException, IOException, NaoCompiladoException, NenhumArquivoCompiladoException{
		
		file = new File(caminho);
		if(file.exists()){
			System.out.println("Caminho localizado");
			if(file.isDirectory()){
				diretorio(caminho);
			}else{
				if(caminho.endsWith(".java")){
					arquivo(caminho);
				}else{
					throw new JavaException();
				}
			}
		}else{
			throw new CaminhoNaoEncontraException();
		}
	}
	
	
	private void diretorio(String caminho) throws IOException, NaoCompiladoException, NenhumArquivoCompiladoException{
		compiler.setDiretorio(caminho);
		if(filtros !=null){
			compiler.getDiretorio();
		}
	}
	
	private void arquivo(String caminho) throws IOException, NaoCompiladoException{
		boolean resultado = compiler.setArquivo(caminho);
		if(resultado){
			System.out.println("Arquivo Compilação!" );
			if(filtros != null){
				compiler.getArquivo();
			}
		}else{
			throw new NaoCompiladoException();
		}
	}
	
	
	
	
	
}
